<?php

namespace JLPay\Models\Trans\C2b;

use JLPay\Models\BaseResponse;

/**
 * 二维码支付响应模型
 */
class QrcodePayResponse extends BaseResponse
{
    /**
     * @var string|null 二维码链接
     */
    protected ?string $qrcodeUrl = null;

    /**
     * @var string|null 二维码内容
     */
    protected ?string $qrcodeContent = null;

    /**
     * @var string|null 外部订单号
     */
    protected ?string $outTradeNo = null;

    /**
     * @var string|null 平台订单号
     */
    protected ?string $transactionId = null;

    /**
     * 构造函数
     *
     * @param array|null $responseArray 响应数组
     */
    public function __construct(?array $responseArray = null)
    {
        parent::__construct($responseArray);

        if ($responseArray) {
            $this->qrcodeUrl = $responseArray['qrcode_url'] ?? null;
            $this->qrcodeContent = $responseArray['qrcode_content'] ?? null;
            $this->outTradeNo = $responseArray['out_trade_no'] ?? null;
            $this->transactionId = $responseArray['transaction_id'] ?? null;
        }
    }

    /**
     * 设置二维码链接
     *
     * @param string $qrcodeUrl 二维码链接
     * @return $this
     */
    public function setQrcodeUrl(string $qrcodeUrl): self
    {
        $this->qrcodeUrl = $qrcodeUrl;
        return $this;
    }

    /**
     * 获取二维码链接
     *
     * @return string|null 二维码链接
     */
    public function getQrcodeUrl(): ?string
    {
        return $this->qrcodeUrl;
    }

    /**
     * 设置二维码内容
     *
     * @param string $qrcodeContent 二维码内容
     * @return $this
     */
    public function setQrcodeContent(string $qrcodeContent): self
    {
        $this->qrcodeContent = $qrcodeContent;
        return $this;
    }

    /**
     * 获取二维码内容
     *
     * @return string|null 二维码内容
     */
    public function getQrcodeContent(): ?string
    {
        return $this->qrcodeContent;
    }

    /**
     * 设置外部订单号
     *
     * @param string $outTradeNo 外部订单号
     * @return $this
     */
    public function setOutTradeNo(string $outTradeNo): self
    {
        $this->outTradeNo = $outTradeNo;
        return $this;
    }

    /**
     * 获取外部订单号
     *
     * @return string|null 外部订单号
     */
    public function getOutTradeNo(): ?string
    {
        return $this->outTradeNo;
    }

    /**
     * 设置平台订单号
     *
     * @param string $transactionId 平台订单号
     * @return $this
     */
    public function setTransactionId(string $transactionId): self
    {
        $this->transactionId = $transactionId;
        return $this;
    }

    /**
     * 获取平台订单号
     *
     * @return string|null 平台订单号
     */
    public function getTransactionId(): ?string
    {
        return $this->transactionId;
    }

    /**
     * 转换为数组格式
     *
     * @return array 数组格式的数据
     */
    public function toArray(): array
    {
        $data = parent::toArray();
        $data = array_merge($data, [
            'qrcode_url' => $this->qrcodeUrl,
            'qrcode_content' => $this->qrcodeContent,
            'out_trade_no' => $this->outTradeNo,
            'transaction_id' => $this->transactionId
        ]);

        return $data;
    }
} 